package com.google.code.lf.commons.xml.bind.adapter;

import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;

import javax.xml.bind.annotation.adapters.XmlAdapter;

/**
 * Classe permettant de gérer les conversions de montants en chaîne de caractères dans l'api <a href="https://jaxb.dev.java.net/">JAXB</a>.
 * 
 * @author gael.lorent-fonfrede
 */
public class XmlBigDecimalAdapter extends XmlAdapter<String, BigDecimal> {
	/** Symboles pour le formatteur de nombres. */
	private static final DecimalFormatSymbols dfs = new DecimalFormatSymbols();
	/** Formatteur de nombres. */
	private static final DecimalFormat df = new DecimalFormat("0.0000000", dfs);
	static {
		// Adaptation du pattern aux spécificités du formattage Grisbi
		dfs.setDecimalSeparator(',');
		df.setGroupingUsed(false);
		df.setParseBigDecimal(true);
	}

	/* (non-Javadoc)
	 * @see javax.xml.bind.annotation.adapters.XmlAdapter#unmarshal(java.lang.Object)
	 */
	@Override
	public BigDecimal unmarshal(final String bigDecimal) throws Exception {
		return (BigDecimal) df.parse(bigDecimal);
	}

	/* (non-Javadoc)
	 * @see javax.xml.bind.annotation.adapters.XmlAdapter#marshal(java.lang.Object)
	 */
	@Override
	public String marshal(final BigDecimal bigDecimal) throws Exception {
		return df.format(bigDecimal);
	}
}
